home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE08 / FILES / NAMES2U.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-03-07  |  8.4 KB  |  313 lines

  1. unit Names2u;
  2.  
  3. interface
  4.  
  5. uses
  6.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  7.   Forms, Dialogs, Menus, Buttons, ExtCtrls, StdCtrls, ClipBrd, Mask, Names2U2;
  8.  
  9. const
  10.   wm_MadeUpMsg = wm_User + 100;
  11.   RecordNumStr = '%d of %d';
  12.  
  13. type
  14.   TState = (sInactive, sBrowse, sChange, sAppend);
  15.  
  16.   TDataForm = class(TForm)
  17.     MainMenu1: TMainMenu;
  18.     FirstMnu: TMenuItem;
  19.     PriorMnu: TMenuItem;
  20.     NextMnu: TMenuItem;
  21.     LastMnu: TMenuItem;
  22.     FileMnu: TMenuItem;
  23.     EditMnu: TMenuItem;
  24.     DeleteMnu: TMenuItem;
  25.     PasteMnu: TMenuItem;
  26.     CopyMnu: TMenuItem;
  27.     CutMnu: TMenuItem;
  28.     UndoMnu: TMenuItem;
  29.     ExitBtn: TMenuItem;
  30.     IgnoreMe2: TMenuItem;
  31.     IgnoreMe1: TMenuItem;
  32.     SpeedBar: TPanel;
  33.     UndoBtn: TSpeedButton;
  34.     CutBtn: TSpeedButton;
  35.     CopyBtn: TSpeedButton;
  36.     PasteBtn: TSpeedButton;
  37.     FirstBtn: TSpeedButton;
  38.     PriorBtn: TSpeedButton;
  39.     NextBtn: TSpeedButton;
  40.     LastBtn: TSpeedButton;
  41.     SpeedButton1: TSpeedButton;
  42.     NameEdt: TEdit;
  43.     StatusLine: TPanel;
  44.     RecordNum: TPanel;
  45.     DOBEdt: TMaskEdit;
  46.     IgnoreMe3: TMenuItem;
  47.     NewMnu: TMenuItem;
  48.     IgnoreMe4: TMenuItem;
  49.     ChangeMnu: TMenuItem;
  50.     NewBtn: TSpeedButton;
  51.     ChangeBtn: TSpeedButton;
  52.     DeleteBtn: TSpeedButton;
  53.     procedure FormCreate(Sender: TObject);
  54.     procedure FormDestroy(Sender: TObject);
  55.     procedure NewClick(Sender: TObject);
  56.     procedure ChangeClick(Sender: TObject);
  57.     procedure FirstClick(Sender: TObject);
  58.     procedure PriorClick(Sender: TObject);
  59.     procedure NextClick(Sender: TObject);
  60.     procedure LastClick(Sender: TObject);
  61.     procedure ExitClick(Sender: TObject);
  62.     procedure EditItemClick(Sender: TObject);
  63.     procedure EditBoxKeyUp(Sender: TObject; var Key: Word;
  64.       Shift: TShiftState);
  65.     procedure EditBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
  66.       Y: Integer);
  67.     procedure EditBoxMouseDown(Sender: TObject; Button: TMouseButton;
  68.       Shift: TShiftState; X, Y: Integer);
  69.     procedure EditBoxChange(Sender: TObject);
  70.     procedure EditBoxExit(Sender: TObject);
  71.   private
  72.     { Defaults to sInactive }
  73.     FState: TState;
  74.     procedure DoHint(Sender: TObject);
  75.     procedure SetupButtons;
  76.     procedure SetUpClipBoardItems(Sender: TComponent);
  77.     procedure ShowRecord(RecNo: Cardinal);
  78.     procedure ShowRecNo(RecNo: Cardinal);
  79.     procedure WMMadeUpMsg(var Msg: TMessage); message wm_MadeUpMsg;
  80.     procedure SetState(State: TState);
  81.   public
  82.     DataFile: TDataFile;
  83.     DataRec: TDataRec;
  84.     property State: TState read FState write SetState;
  85.   end;
  86.  
  87. var
  88.   DataForm: TDataForm;
  89.  
  90. implementation
  91.  
  92. {$R *.DFM}
  93.  
  94. procedure TDataForm.DoHint(Sender: TObject);
  95. begin
  96.   StatusLine.Caption := Application.Hint;
  97. end;
  98.  
  99. procedure TDataForm.SetState(State: TState);
  100. begin
  101.   if FState <> State then
  102.   begin
  103.     if FState in [sChange, sAppend] then
  104.     begin
  105.       DataRec.Name := NameEdt.Text;
  106.       DataRec.DOB := StrToDate(DOBEdt.Text);
  107.       DataFile.Records[DataFile.Current] := DataRec;
  108.     end;
  109.     FState := State;
  110.     if FState = sAppend then
  111.       DataFile.Current := DataFile.Count;
  112.     ShowRecNo(DataFile.Current);
  113.     SetupButtons;
  114.     ChangeMnu.Enabled := FState <> sInactive;
  115.     ChangeBtn.Enabled := ChangeMnu.Enabled;
  116.     ChangeMnu.Checked := State in [sChange, sAppend];
  117.     ChangeBtn.Down := ChangeMnu.Checked;
  118.     NameEdt.Enabled := ChangeMnu.Checked;
  119.     DOBEdt.Enabled := ChangeMnu.Checked;
  120.   end;
  121. end;
  122.  
  123. procedure TDataForm.SetupButtons;
  124. begin
  125.   FirstBtn.Enabled := DataFile.Current > 0;
  126.   FirstMnu.Enabled := FirstBtn.Enabled;
  127.   PriorBtn.Enabled := FirstBtn.Enabled;
  128.   PriorMnu.Enabled := FirstBtn.Enabled;
  129.   NextBtn.Enabled := DataFile.Current < Pred(DataFile.Count);
  130.   NextMnu.Enabled := NextBtn.Enabled;
  131.   LastBtn.Enabled := NextBtn.Enabled;
  132.   LastMnu.Enabled := NextBtn.Enabled;
  133. end;
  134.  
  135. procedure TDataForm.SetUpClipBoardItems(Sender: TComponent);
  136. var
  137.   EditCtl: TCustomEdit;
  138. begin
  139.   if (Sender is TCustomEdit) and TCustomEdit(Sender).Enabled then
  140.   begin
  141.     EditCtl := Sender as TCustomEdit;
  142.     UndoMnu.Enabled := Bool(EditCtl.Perform(em_CanUndo, 0, 0));
  143.     UndoBtn.Enabled := UndoMnu.Enabled;
  144.     CutMnu.Enabled := EditCtl.SelLength > 0;
  145.     CutBtn.Enabled := CutMnu.Enabled;
  146.     CopyMnu.Enabled := CutMnu.Enabled;
  147.     CopyBtn.Enabled := CutMnu.Enabled;
  148.     PasteMnu.Enabled := ClipBoard.AsText <> '';
  149.     PasteBtn.Enabled := PasteMnu.Enabled;
  150.     DeleteMnu.Enabled := EditCtl.SelLength > 0;
  151.     DeleteBtn.Enabled := DeleteMnu.Enabled;
  152.   end
  153.   else
  154.   begin
  155.     UndoMnu.Enabled := False;
  156.     UndoBtn.Enabled := False;
  157.     CutMnu.Enabled := False;
  158.     CutBtn.Enabled := False;
  159.     CopyMnu.Enabled := False;
  160.     CopyBtn.Enabled := False;
  161.     PasteMnu.Enabled := False;
  162.     PasteBtn.Enabled := False;
  163.     DeleteMnu.Enabled := False;
  164.     DeleteBtn.Enabled := False;
  165.   end;
  166. end;
  167.  
  168. procedure TDataForm.ShowRecord(RecNo: Cardinal);
  169. begin
  170.   try
  171.     ShowRecNo(RecNo);
  172.     with DataFile[RecNo] do
  173.     begin
  174.       NameEdt.Text := Name;
  175.       DOBEdt.Text := DateToStr(DOB);
  176.     end;
  177.     State := sBrowse;
  178.     SetupButtons;
  179.   except
  180.     on EListError do { Nothing }
  181.   end;
  182. end;
  183.  
  184. { Pass in real record number, and it adds 1 (they start at 0) }
  185. procedure TDataForm.ShowRecNo(RecNo: Cardinal);
  186. begin
  187.   if State = sAppend then
  188.     RecordNum.Caption := Format(RecordNumStr, [Succ(RecNo), Succ(DataFile.Count)])
  189.   else
  190.     if DataFile.Count > 0 then
  191.       RecordNum.Caption := Format(RecordNumStr, [Succ(RecNo), DataFile.Count])
  192.     else
  193.       RecordNum.Caption := 'No records';
  194. end;
  195.  
  196. procedure TDataForm.WMMadeUpMsg(var Msg: TMessage);
  197. begin
  198.   SetUpClipBoardItems(ActiveControl);
  199. end;
  200.  
  201. procedure TDataForm.FormCreate(Sender: TObject);
  202. begin
  203.   Application.OnHint := DoHint;
  204.   { When the form has finished setting itself up, (i.e. all }
  205.   { the controls have been made and focus has been given to }
  206.   { one of them) this posted message will be processed and }
  207.   { so the edit buttons/menus will be in a sensible state }
  208.   PostMessage(Handle, wm_MadeUpMsg, 0, 0);
  209.   DataFile := TDataFile.Create;
  210.   NewMnu.Enabled := True;
  211.   ShowRecord(0);
  212. end;
  213.  
  214. procedure TDataForm.FormDestroy(Sender: TObject);
  215. begin
  216.   if Assigned(DataFile) then
  217.     DataFile.Free;
  218. end;
  219.  
  220. procedure TDataForm.NewClick(Sender: TObject);
  221. begin
  222.   State := sAppend;
  223.   NameEdt.SetFocus;
  224. end;
  225.  
  226. procedure TDataForm.ChangeClick(Sender: TObject);
  227. const
  228.   States: array[Boolean] of TState = (sBrowse, sChange);
  229. begin
  230.   State := States[State = sBrowse];
  231. end;
  232.  
  233. procedure TDataForm.FirstClick(Sender: TObject);
  234. begin
  235.   State := sBrowse;
  236.   DataFile.Current := 0;
  237.   ShowRecord(DataFile.Current);
  238. end;
  239.  
  240. procedure TDataForm.PriorClick(Sender: TObject);
  241. begin
  242.   State := sBrowse;
  243.   DataFile.Current := DataFile.Current - 1;
  244.   ShowRecord(DataFile.Current);
  245. end;
  246.  
  247. procedure TDataForm.NextClick(Sender: TObject);
  248. begin
  249.   State := sBrowse;
  250.   DataFile.Current := Succ(DataFile.Current);
  251.   ShowRecord(DataFile.Current);
  252. end;
  253.  
  254. procedure TDataForm.LastClick(Sender: TObject);
  255. begin
  256.   State := sBrowse;
  257.   DataFile.Current := Pred(DataFile.Count);
  258.   ShowRecord(DataFile.Current);
  259. end;
  260.  
  261. procedure TDataForm.ExitClick(Sender: TObject);
  262. begin
  263.   Close;
  264. end;
  265.  
  266. procedure TDataForm.EditItemClick(Sender: TObject);
  267. begin
  268.   if ActiveControl is TCustomEdit then
  269.     with TCustomEdit(ActiveControl) do
  270.       case (Sender as TComponent).Tag of
  271.         1: Perform(em_Undo, 0, 0);
  272.         2: CutToClipBoard;
  273.         3: CopyToClipBoard;
  274.         4: PasteFromClipBoard;
  275.         5: ClearSelection;
  276.       end;
  277. end;
  278.  
  279. procedure TDataForm.EditBoxKeyUp(Sender: TObject; var Key: Word;
  280.   Shift: TShiftState);
  281. begin
  282.   SetUpClipBoardItems(Sender as TComponent);
  283. end;
  284.  
  285. procedure TDataForm.EditBoxMouseMove(Sender: TObject; Shift: TShiftState; X,
  286.   Y: Integer);
  287. begin
  288.   if ssLeft in Shift then
  289.     SetUpClipBoardItems(Sender as TComponent);
  290. end;
  291.  
  292. procedure TDataForm.EditBoxMouseDown(Sender: TObject; Button: TMouseButton;
  293.   Shift: TShiftState; X, Y: Integer);
  294. begin
  295.   SetUpClipBoardItems(Sender as TComponent);
  296. end;
  297.  
  298. procedure TDataForm.EditBoxChange(Sender: TObject);
  299. begin
  300.   SetUpClipBoardItems(Sender as TComponent);
  301. end;
  302.  
  303. procedure TDataForm.EditBoxExit(Sender: TObject);
  304. begin
  305.   SetUpClipBoardItems(ActiveControl);
  306. end;
  307.  
  308. initialization
  309.   { Since all labels on the form have had their names removed }
  310.   { this line prevents a startup error - remove it and see }
  311.   RegisterClasses([TLabel]);
  312. end.
  313.